🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / firmware / src / commonMain / kotlin / org / meshtastic / feature / firmware / ota / ThroughputTracker.kt
Displaying Raw • Download
feature/firmware/src/commonMain/kotlin/org/meshtastic/feature/firmware/ota/ThroughputTracker.kt 2d20cd8a4708e2ef66e98d5259f3a97ec93f240a (2d20cd8a) Text, 2.19 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.firmware.ota
Tff7b72import T7ee787kotlin.time.TimeSource
Tff7b72private Tff7b72const Tff7b72val Te6edf3MILLIS_PER_SECOND Tff7b72= T79c0ff1T79c0ff0T79c0ff0T79c0ff0L
T8b949e/**
* Sliding window throughput tracker to calculate current transfer speed in bytes per second. Adapted from kmp-ble's
* DfuProgress throughput tracking.
*/
Tff7b72class T56d364ThroughputTrackerTb4b4b4(Tff7b72private Tff7b72val Te6edf3windowSizeTb4b4b4: Tffa657Int Tff7b72= T79c0ff1T79c0ff0Tb4b4b4, Tff7b72private Tff7b72val Te6edf3timeSourceTb4b4b4: Te6edf3TimeSource Tff7b72= Te6edf3TimeSourceTb4b4b4.Te6edf3MonotonicTb4b4b4) Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3timestamps Tff7b72= Te6edf3LongArrayTb4b4b4(Te6edf3windowSizeTb4b4b4)
Tff7b72private Tff7b72val Te6edf3byteCounts Tff7b72= Te6edf3LongArrayTb4b4b4(Te6edf3windowSizeTb4b4b4)
Tff7b72private Tff7b72var Te6edf3head Tff7b72= T79c0ff0
Tff7b72private Tff7b72var Te6edf3size Tff7b72= T79c0ff0
Tff7b72private Tff7b72val Te6edf3startMark Tff7b72= Te6edf3timeSourceTb4b4b4.Te6edf3markNowTb4b4b4(Tb4b4b4)
T8b949e/** Record that [bytesSent] total bytes have been sent at the current time. */
Tff7b72fun Td2a8ffrecordTb4b4b4(Te6edf3bytesSentTb4b4b4: Tffa657LongTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3elapsed Tff7b72= Te6edf3startMarkTb4b4b4.Te6edf3elapsedNowTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3inWholeMilliseconds
Te6edf3timestampsTff7b72[Te6edf3headTff7b72] Tff7b72= Te6edf3elapsed
Te6edf3byteCountsTff7b72[Te6edf3headTff7b72] Tff7b72= Te6edf3bytesSent
Te6edf3head Tff7b72= Tb4b4b4(Te6edf3head Tff7b72+ T79c0ff1Tb4b4b4) Tff7b72% Te6edf3windowSize
Tff7b72if Tb4b4b4(Te6edf3size Tff7b72< Te6edf3windowSizeTb4b4b4) Te6edf3sizeTff7b72+Tff7b72+
Tb4b4b4}
T8b949e/** Returns the current throughput in bytes per second based on the sliding window. */
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffReturnCountTa5d6ff"Tb4b4b4)
Tff7b72fun Td2a8ffbytesPerSecondTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Long Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3size Tff7b72< T79c0ff2Tb4b4b4) Tff7b72return T79c0ff0
Tff7b72val Te6edf3oldestIdx Tff7b72= Tff7b72if Tb4b4b4(Te6edf3size Tff7b72< Te6edf3windowSizeTb4b4b4) T79c0ff0 Tff7b72else Te6edf3head
Tff7b72val Te6edf3newestIdx Tff7b72= Tb4b4b4(Te6edf3head Tff7b72- T79c0ff1 Tff7b72+ Te6edf3windowSizeTb4b4b4) Tff7b72% Te6edf3windowSize
Tff7b72val Te6edf3durationMs Tff7b72= Te6edf3timestampsTff7b72[Te6edf3newestIdxTff7b72] Tff7b72- Te6edf3timestampsTff7b72[Te6edf3oldestIdxTff7b72]
Tff7b72if Tb4b4b4(Te6edf3durationMs Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tff7b72return T79c0ff0
Tff7b72val Te6edf3deltaBytes Tff7b72= Te6edf3byteCountsTff7b72[Te6edf3newestIdxTff7b72] Tff7b72- Te6edf3byteCountsTff7b72[Te6edf3oldestIdxTff7b72]
Tff7b72return Tb4b4b4(Te6edf3deltaBytes Tff7b72* Te6edf3MILLIS_PER_SECONDTb4b4b4) Tff7b72/ Te6edf3durationMs
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.04s